// 各大屏需要使用的公共工具方法

/** 根据浏览器大小推断缩放比例:
 * 当屏幕宽高比 < 设计稿宽高比，需要缩放的比例是：屏幕宽度 / 设计稿宽度
 * 当屏幕宽高比 > 设计稿宽高比，需要缩放的比例是：屏幕高度 / 设计稿高度
 * @param {Number} designDraftWidth -  设计稿宽度；
 * @param {Number} designDraftHeight  -  设计稿高度；
 * @returns {Number} - 缩放比例
 */
export const getScale = (designDraftWidth = 1920, designDraftHeight = 1080) => {
  let ww = window.innerWidth / designDraftWidth;
  let wh = window.innerHeight / designDraftHeight;
  return ww < wh ? ww : wh;
};

/** 将'元'处理成'万元'，并保留小数点后两位
 * @param {any} - 元
 * @returns {Number} - 格式：465.25
 */
export const changeNumToWan = (val) => {
  if (!val) return "0.00";
  let valNum = Number(val) / 10000;
  return _.round(valNum, 2);
};

//计算表格最大高度
export const calcHeight = (className) => {
  let el = document.getElementsByClassName(className);
  if (el) {
    return el[0].clientHeight;
  } else {
    return 0;
  }
};



// 3D饼图使用 - 生成扇形的曲面参数方程，用于 series-surface.parametricEquation
export const getParametricEquation = (
  startRatio,
  endRatio,
  isSelected,
  isHovered,
  k,
  h
) => {
  // 计算
  let midRatio = (startRatio + endRatio) / 2;
  let startRadian = startRatio * Math.PI * 2;
  let endRadian = endRatio * Math.PI * 2;
  let midRadian = midRatio * Math.PI * 2;
  // 如果只有一个扇形，则不实现选中效果。
  if (startRatio === 0 && endRatio === 1) {
    isSelected = false;
  }
  // 通过扇形内径/外径的值，换算出辅助参数 k（默认值 1/3）
  k = typeof k !== "undefined" ? k : 1 / 3;
  // 计算选中效果分别在 x 轴、y 轴方向上的位移（未选中，则位移均为 0）
  let offsetX = isSelected ? Math.cos(midRadian) * 0.1 : 0;
  let offsetY = isSelected ? Math.sin(midRadian) * 0.1 : 0;
  // 计算高亮效果的放大比例（未高亮，则比例为 1）
  let hoverRate = isHovered ? 1.05 : 1;
  // 返回曲面参数方程
  return {
    u: {
      min: -Math.PI,
      max: Math.PI * 3,
      step: Math.PI / 32,
    },
    v: {
      min: 0,
      max: Math.PI * 2,
      step: Math.PI / 20,
    },
    x: function (u, v) {
      if (u < startRadian) {
        return (
          offsetX + Math.cos(startRadian) * (1 + Math.cos(v) * k) * hoverRate
        );
      }
      if (u > endRadian) {
        return (
          offsetX + Math.cos(endRadian) * (1 + Math.cos(v) * k) * hoverRate
        );
      }
      return offsetX + Math.cos(u) * (1 + Math.cos(v) * k) * hoverRate;
    },
    y: function (u, v) {
      if (u < startRadian) {
        return (
          offsetY + Math.sin(startRadian) * (1 + Math.cos(v) * k) * hoverRate
        );
      }
      if (u > endRadian) {
        return (
          offsetY + Math.sin(endRadian) * (1 + Math.cos(v) * k) * hoverRate
        );
      }
      return offsetY + Math.sin(u) * (1 + Math.cos(v) * k) * hoverRate;
    },
    z: function (u, v) {
      if (u < -Math.PI * 0.5) {
        return Math.sin(u);
      }
      if (u > Math.PI * 2.5) {
        return Math.sin(u) * h * 0.1;
      }
      return Math.sin(v) > 0 ? 1 * h * 0.1 : -1;
    },
  };
};

//3D饼图使用 - 一个自定义计算的方法
export const fomatFloat3D = (num, n) => {
  let f = parseFloat(num);
  if (isNaN(f)) {
    return false;
  }
  f = Math.round(num * Math.pow(10, n)) / Math.pow(10, n); // n 幂
  let s = f.toString();
  let rs = s.indexOf(".");
  //判定如果是整数，增加小数点再补0
  if (rs < 0) {
    rs = s.length;
    s += ".";
  }
  while (s.length <= rs + n) {
    s += "0";
  }
  return s;
};



